﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace GUI
{
    public partial class Main : Form
    {
        private List<SimDTO> listDanhSachSim;
        int soLuongSim;
        public Boolean reset = true;
        string run = "Standard";
        //quan ly nguoi dung:
        public int dangnhap = 0;// 0-chua dang nhap; 1-nhanvien; 2-khachhang
        public int manhanvien;
        public string email;
        public int makhachhang;
        public string matkhau;//
        public Main()
        {
            InitializeComponent();
        }

        private void Main_Activated(object sender, EventArgs e)
        {
            if (reset)
            {
                //load full danh sach sim
                listDanhSachSim = SimBUS.TimKiem("", -1, -1, -1, -1, ref soLuongSim, run);
                insertDgvDanhSachSim();

                loadComboBoxMang();
                loadComboBoxMangTheCao();
                loadComboBoxLoaiSim();
                loadComboBoxMenhGia();
                reset = false;
            }
            
        }
        
        #region load Combobox
        private void loadComboBoxMang()
        {
            List<NhaMangDTO> listNhaMangDTO = NhaMangBUS.SeleclNhaMangAll();//load từ csdl
            if (listNhaMangDTO != null)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("text");
                dt.Columns.Add("value");
                NhaMangDTO item = new NhaMangDTO();
                dt.Rows.Add("Tất cả", "-1");
                for (int i = 0; i < listNhaMangDTO.Count; i++)
                {
                    item = listNhaMangDTO[i];
                    dt.Rows.Add(item.TenNhaMang, item.MaNhaMang);

                }
                cmbMang.DisplayMember = "text";
                cmbMang.ValueMember = "value";
                cmbMang.DataSource = dt;
            }
        }

        private void loadComboBoxMangTheCao()
        {  
            List<NhaMangDTO> listNhaMangDTO = NhaMangBUS.SeleclNhaMangAll();//load từ csdl
            if (listNhaMangDTO != null)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("text");
                dt.Columns.Add("value");
                NhaMangDTO item = new NhaMangDTO();
                for (int i = 0; i < listNhaMangDTO.Count; i++)
                {
                    item = listNhaMangDTO[i];
                    dt.Rows.Add(item.TenNhaMang, item.MaNhaMang);

                }
                cmbMangTheCao.DisplayMember = "text";
                cmbMangTheCao.ValueMember = "value";
                cmbMangTheCao.DataSource = dt;
            }
        }

        private void loadComboBoxLoaiSim()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("text");
            dt.Columns.Add("value");
            dt.Rows.Add("Tất cả", "-1");
            List<LoaiSimDTO> listLoaiSim= LoaiSimBUS.DanhSachLoaiSim();
            LoaiSimDTO item = new LoaiSimDTO();
            if (listLoaiSim != null)
            {
                for (int i = 0; i < listLoaiSim.Count; i++)
                {
                    item = listLoaiSim[i];
                    dt.Rows.Add(item.TenLoaiSim, item.MaLoaiSim);

                }
                cmbLoaiSim.DisplayMember = "text";
                cmbLoaiSim.ValueMember = "value";
                cmbLoaiSim.DataSource = dt;
              
               
            }
          
        }

        private void loadComboBoxMenhGia()
        {

            DataTable dt = GUI.DataMenhGia();
            cmbMenhGia.DisplayMember = "text";
            cmbMenhGia.ValueMember = "value";
            cmbMenhGia.DataSource = dt;
        
        }
        #endregion load Combobox

        #region bgWorker
        // e.Argument = int[a,b]
        //a=1: tìm theo nhà mạng
        //a=2: tìm theo loại sim
        //a=3: tìm theo nhiều tiêu chí
        //b= value: mã nhà mạng hoặc loại sim (a=1 và a=2)

        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            int[] ar = (int[])e.Argument;
            if(ar[0] == 1)
            {
                //tim kiem theo nha mang vinaphone (lbvinaphone_click)
                listDanhSachSim = SimBUS.TimKiem("", -1, -1, -1, ar[1], ref soLuongSim, run);
            }
            else if (ar[0] == 2)
            {
                listDanhSachSim = SimBUS.TimKiem("", -1, -1, ar[1], -1, ref soLuongSim, run);
            }
            else if(ar[0] ==3)
            {
                string sothuebao = txtSoThueBao.Text;
                int giatu;
                int giaden;
                int LoaiSim = int.Parse(cmbLoaiSim.SelectedValue.ToString());
                int Mang = int.Parse(cmbMang.SelectedValue.ToString());
                if (txtGiaTu.Text == "")
                {
                    giatu = -1;
                }
                else
                {
                    giatu = int.Parse(txtGiaTu.Text);
                }

                if (txtGiaDen.Text == "")
                {
                    giaden = -1;
                }
                else
                {
                    giaden = int.Parse(txtGiaDen.Text);
                }

                listDanhSachSim = SimBUS.TimKiem(sothuebao, giatu, giaden, LoaiSim, Mang, ref soLuongSim, run);
            }
            else if (ar[0] == 4)
            {
                listDanhSachSim = SimBUS.TimKiem("", -1, -1, -1, -1, ref soLuongSim, "");
            }

        }

        private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            endWorker();
            insertDgvDanhSachSim();
        }
        #endregion bgWorker

        #region Quản lý trạng thái form
        private void beginWorker()
        {
            pnMain.Enabled = false;
            lbWaitting.Text = "Vui lòng chờ";
            tmWaitting.Start();
        }

        private void endWorker()
        {
            pnMain.Enabled = true;
            tmWaitting.Stop();
            lbWaitting.Text = "Hệ thống quản lý sim";
        }

        private void tmWaitting_Tick(object sender, EventArgs e)
        {
            if (lbWaitting.Text.Length ==20)
            {
                lbWaitting.Text = "Vui lòng chờ";
            }
            else 
            {
                lbWaitting.Text += ".";
            }
        }
        #endregion Quản lý trạng thái form

        #region Nhóm Hàm xử lý
        private void insertDgvDanhSachSim()
        {
            dgvDanhSachSim.Rows.Clear();
            gpDanhSachSim.Text = "Danh sách Sim: " + soLuongSim.ToString() + " sim";
            NhaMangDTO item1;
            if (listDanhSachSim != null)
            {
                SimDTO item = new SimDTO();
                for (int i = 0; i < listDanhSachSim.Count; i++)
                {
                    item = listDanhSachSim[i];
                    item1 = NhaMangBUS.SelectNhaMangByID(item.MaNhaMang);
                    dgvDanhSachSim.Rows.Add((i + 1), item.MaSanPham, item.SoThueBao, string.Format("{0:#,0.##}", item.DonGia), item1.TenNhaMang.ToString(), "Đặt mua");
                }
            }
        }
        #endregion Nhóm Hàm xử lý

        #region Nhóm hàm sự kiện

        #region Label Nhà Mạng - Click
        private void lbVinaPhone_Click(object sender, EventArgs e)
        {
            //Tìm kiếm theo nhà mạng vinaPhone id =1
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 1, 1 });
        }
        private void lbMobiPhone_Click(object sender, EventArgs e)
        {
            //Tìm kiếm theo nhà mạng mobiphone id =2
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 1, 2 });
        }

        private void lbVietTell_Click(object sender, EventArgs e)
        {
            //Tìm kiếm theo nhà mạng viettel id =3
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 1, 3 });
        }
        #endregion Label NhaMang

        #region Label Loại Sim - Click
        private void lbTuQuy_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 1 });
        }

        private void lbTamQuy_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 2 });
        }

        private void lbLucQuy_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 3 });
        }

        private void lbNguQuy_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 4 });
        }

        private void lbTaxi_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 5});
        }

        private void lbLocPhat_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 6 });
        }

        private void lbThanTai_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 7 });
        }

        private void lbTien_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 8 });
        }

        private void lbKep_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 9 });
        }
        private void lbNamSinh_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 10 });
        }
        private void lbGanhDao_Click(object sender, EventArgs e)
        {
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 2, 11 });
        }
        #endregion Label Loại Sim - Click

        private void btnTim_Click(object sender, EventArgs e)
        {
            //tìm kiếm theo nhiều tiêu chí
            List<string> listRun = new List<string>();
            listRun.Add("Unrepeatable read error");
            listRun.Add("Unrepeatable read fix");
            FormRun f = new FormRun();
            f.listRun = listRun;
            f.ShowDialog();
            run = f.run;
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 3, -1});
        }

        private void btnLamLai_Click(object sender, EventArgs e)
        {
            //load lại form như ban đầu
            txtSoThueBao.Text = "";
            txtGiaTu.Text = "";
            txtGiaDen.Text = "";
            cmbLoaiSim.SelectedIndex = 0;
            cmbMang.SelectedIndex = 0;
            beginWorker();
            bgWorker.RunWorkerAsync(new int[] { 4, -1 });
        }

        private void btnDangNhap_Click(object sender, EventArgs e)
        {
            //kiểm tra đăng nhập
            if (rdKhachHang.Checked == true)
            {
                //dang nhap khach hang
                KhachHangDTO khachHangDTO = KhachHangBUS.DangNhap(txtEmail.Text, txtMatKhau.Text);
                if (khachHangDTO != null)
                {
                    dangnhap = 2;
                    email = txtEmail.Text.Trim();
                    makhachhang = khachHangDTO.MaKhachHang;
                    matkhau = txtMatKhau.Text.Trim();
                    lbLoai.Text = "Khách hàng";
                    lbTen.Text =  txtEmail.Text;
                }
                else
                {
                    MessageBox.Show("Bạn đã đăng nhập sai");
                }

            }
            else
            {
                //dang nhap nhan vien
                int a;
                if (int.TryParse(txtEmail.Text, out a))
                {
                    NhanVienDTO nhanVienDTO = NhanVienBUS.DangNhap(int.Parse(txtEmail.Text), txtMatKhau.Text);
                    if (nhanVienDTO != null)
                    {
                        dangnhap = 1;
                        manhanvien = int.Parse(txtEmail.Text.Trim());
                        matkhau = txtMatKhau.Text.Trim();
                        lbLoai.Text = "Nhân Viên";
                        lbTen.Text = "ID:" + txtEmail.Text;
                    }
                    else
                    {
                        
                    }
                }
            }
            if (dangnhap != 0)
            {
                //nếu đăng nhập thành công thay panel đăng nhập thành phanel quản lý
                lbTen.Location = new Point((pnQuanLy.Width - lbTen.Width) / 2, lbTen.Location.Y);
                lbLoai.Location = new Point((pnQuanLy.Width - lbLoai.Width) / 2, lbLoai.Location.Y);
                pnQuanLy.Visible = true;
                pnDangNhap.Visible = false;
            }
            
        }

        private void btnMua_Click(object sender, EventArgs e)
        {
            //Mua thẻ cào
            if (dangnhap == 2)
            {
                int MaNhaMang = int.Parse(cmbMangTheCao.SelectedValue.ToString());
                int MenhGia = int.Parse(cmbMenhGia.Text);
                TheCaoDTO dt = TheCaoBUS.DanhSachTheCao(MenhGia, MaNhaMang);
                if (dt != null)
                {
                    int MaSanPham = dt.MaSanPham;
                     DialogResult res = MessageBox.Show("Bạn có muốn mua thẻ cào " + cmbMangTheCao.Text + " " +  MenhGia + ".000 VND", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                     if (res == DialogResult.Yes)
                     {
                         bool kq = DonHangBUS.MuaSanPham(MaSanPham, makhachhang);
                         if (kq)
                         {
                             MessageBox.Show("Bạn đã đặt mua thành công");
                         }
                         else
                         {
                             MessageBox.Show("Bạn đã đặt mua thất bại");
                         }
                     }
                }
                else
                {
                    MessageBox.Show("Sản Phẩm Đã Hết Hàng");
                }
            }
            else
            {
                MessageBox.Show("Bạn phải đăng nhập để thực hiện chức năng này");
            }
        }

        private void dgvDanhSachSim_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //Muasim

            if (e.ColumnIndex == ColDatMua.Index)
            {
                if (dangnhap == 2)
                {
                    //xu ly
                    int maSanPham = (int)dgvDanhSachSim.CurrentRow.Cells[ColMaSanPham.Index].Value;
                    //MessageBox.Show("Mua san Pham: " + maSanPham.ToString());

                    DialogResult res = MessageBox.Show("Bạn có muốn mua sim " + dgvDanhSachSim.Rows[e.RowIndex].Cells[ColSoThueBao.Index].Value.ToString(), "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (res == DialogResult.Yes)
                    {
                        bool kq = DonHangBUS.MuaSanPham(maSanPham, makhachhang);
                        if (kq)
                        {
                            MessageBox.Show("Bạn đã đặt mua thành công");
                            reset = true;
                            Main_Activated(sender, e);
                        }
                        else
                        {
                            MessageBox.Show("Bạn đã đặt mua thất bại");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Bạn phải đăng nhập để thực hiện chức năng này");
                }
            }    
        }

        private void rdKhachHang_CheckedChanged(object sender, EventArgs e)
        {
            lbEmail.Text = "Email:";
            txtEmail.Text = "";
            txtEmail.Focus();
        }

        private void rdNhanVien_CheckedChanged(object sender, EventArgs e)
        {
            lbEmail.Text = "ID:";
            txtEmail.Text = "";
            txtEmail.Focus();
        }


        private void btnQuanLy_Click(object sender, EventArgs e)
        {
            //kiểm tra đăng nhập
            FormQuanLy f = new FormQuanLy();
            if (rdKhachHang.Checked == true)
            {       
                f.email = email;
                f.matkhau = matkhau;
                f.dangnhap = dangnhap;
                f.makhachhang = makhachhang;      

            }
            else
            {
                f.manhanvien = manhanvien;
                f.matkhau = matkhau;
                f.dangnhap = dangnhap;
            }
            f.ShowDialog();
            reset = true;
        }

        private void Main_Resize(object sender, EventArgs e)
        {
            pnMain.Location = new Point((this.Width - pnMain.Width) / 2, pnMain.Location.Y);
        }

        #endregion Nhóm hàm sự kiện

        private void cmbMangTheCao_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void Main_Load(object sender, EventArgs e)
        {
            //load default
            pnQuanLy.Parent = gbDangNhap;
            pnQuanLy.Dock = DockStyle.Fill;
            pnQuanLy.Visible = false;
            pnDangNhap.Visible = true;
        }

        private void txtGiaTu_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtGiaDen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtSoThueBao_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtEmail_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (rdNhanVien.Checked == true &&  !Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void btnDangXuat_Click(object sender, EventArgs e)
        {
            dangnhap = 0;
            pnQuanLy.Visible = false;
            pnDangNhap.Visible = true;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            FormDangKy f = new FormDangKy();
            f.ShowDialog();
            txtEmail.Text = f.email;
            txtMatKhau.Text = f.matkhau;
        }

    }
}
